package furns.entity;


import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Set;

//该类的实例对象表示购物车，可以包含多个CartItem对象
@SuppressWarnings("all")
public class Cart {
    //定义相关属性
    //由于购物车中包含多个CartItem对象，所以需要定义一个HashMap来保存这些CartItem对象
    private HashMap<Integer, CartItem> items = new HashMap<>();

    public HashMap<Integer, CartItem> getItems() {
        return items;
    }

    //判断cart中是否存在商品
    public boolean isEmpty() {
        return items.size() == 0;
    }

    //该方法用来返回购物车中商品的总数量
    public int getTotalCount() {
        //定义购物车中商品的总数量
        int totalCount = 0;
        //遍历items，统计totalCount
        Set<Integer> keys = items.keySet();  //取出items集合中的 key
        for (Integer id : keys) {
            totalCount += items.get(id).getCount();  //取出购物车中每一个商品项的数量
        }
        return totalCount;
    }

    //该方法用来返回当前购物车中的总金额
    public BigDecimal getCartTotalPrice() {
        //定义购物车中商品的总金额
        BigDecimal cartTotalPrice = new BigDecimal(0);
        //遍历items，统计totalPrice
        Set<Integer> keys = items.keySet();  //取出items集合中的 key
        for (Integer id : keys) {
            //执行完add方法完成添加后，一定要进行重新赋值。
            cartTotalPrice = cartTotalPrice.add(items.get(id).getTotalPrice());
        }
        return cartTotalPrice;
    }

    //该方法用来更新指定商品的数量以及总价格
    public void updateCount(int id, int count) {
        //根据传入的id，在当前items集合中查找是否存在相同的cartItem
        CartItem item = items.get(id);
        if (item != null) {
            //表示当前购物车中已经有该家居，则对cartItem的count值进行修改
            item.setCount(count);
            item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount())));
        }
    }

    //添加家居（CartItem）到Cart
    public void addItem(CartItem cartItem) {
        //表示 根据传入的cartItem的id，在当前items集合中查找是否存在相同的cartItem
        CartItem item = items.get(cartItem.getId());
        if (item == null) { //表示当前购物车中还没有该家居，则将传入的cartItem添加到当前购物车中
            items.put(cartItem.getId(), cartItem);
        } else {  //表示当前购物车中已经有该家居，则将传入的cartItem的count值累加到当前购物车中该家居的count值上
            item.setCount(item.getCount() + 1);  //即购物车中该商品的数量+1
            item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount()))); //重新计算购物车中该商品的总价格
        }
    }

    //删除购物车中指定id家居
    public void deleteItem(int id) {
        items.remove(id);
    }

    //清空购物车
    public void clear() {
        items.clear();
    }

    @Override
    public String toString() {
        return "Cart{" +
                "items=" + items +
                '}';
    }
}
